package chapter03.d05;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/***
 * 创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求
 * 
 * @author heliteng
 *
 */
public class CachedThreadPoolDemo {

	public static void main(String[] args) {
		// 创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程，那么就会回收部分空闲（60秒不执行任务）的线程，
		// 当任务数增加时，此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制，
		// 线程池大小完全依赖于操作系统（或者说JVM）能够创建的最大线程大小。
		ExecutorService pool = Executors.newCachedThreadPool();

		pool.execute(new CachedTask());
		pool.execute(new CachedTask());
		pool.execute(new CachedTask());
		pool.execute(new CachedTask());
		pool.execute(new CachedTask());
		pool.execute(new CachedTask());
		pool.execute(new CachedTask());

		// 等待已提交的任务全部结束 不再接受新的任务
		pool.shutdown();
	}
}

class CachedTask implements Runnable {

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + "正在执行… …");
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName() + "执行完毕");
	}
}
